package org.loong.crypto.service.core.provider;

import java.util.Set;

import org.loong.crypto.core.algorithm.CipherAlgorithm;
import org.loong.crypto.core.algorithm.EncryptionMethod;
import org.loong.crypto.core.params.CipherParameters;
import org.loong.crypto.service.core.CryptoContextAware;

/**
 * Cipher (Encryption) Provider.
 */
public interface CipherProvider extends CryptoProvider, CryptoContextAware {

    /**
     * Returns the names of the supported Cipher(Encryption) algorithms by the provider instance.
     *
     * @return the supported Cipher(Encryption) algorithms, empty set if none.
     */
    Set<CipherAlgorithm> supportedCipherAlgorithms();
    
    /**
     * Returns the names of the supported encryption methods by the Cipher provier. 
     *
     * @return the supported encryption methods, empty set if none.
     */
    Set<EncryptionMethod> supportedEncryptionMethods();
    
    /**
     * Return Cipher Parameters.
     * 
     * @return the {@link CipherParameters}
     */
    default CipherParameters getParameters() {
        return null;
    }
}
